home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / data / awkscrpt / life.awk < prev    next >
Text File  |  1995-02-11  |  1KB  |  57 lines

  1. # ライフゲーム  By JOUJI
  2. # Usage:jgawk -f life.awk life.dat
  3.  
  4. BEGIN {
  5.     con="/dev/stdin"
  6.     err="/dev/stderr"
  7.     printf("\x1b[2J") >err
  8.     printf("%12s    世代 000\n",ARGV[1])
  9. }
  10.  
  11. {
  12.     print
  13.     l=jlength($0)
  14.     if(l>xm) xm=l
  15.     s[++j]=" "$0
  16. }
  17.  
  18. # d[i,j]:回りの生の数
  19. # s[y]:今の状態を表す文字列  t[y]:次の状態を表す文字列
  20.  
  21. END {
  22.     xm++
  23.     ym=j+1
  24.     for(g=1;;g++) {
  25.         printf("世代増分('Q'で終了) >\x1b[0K") >err
  26.         if(g<gm) print "" >err
  27.         else {
  28.             getline <con
  29.             if(/[Qq]/) exit
  30.             if($0>0) gm=g+$0
  31.         }
  32.         for(y=1;y<ym;y++) {
  33.             while( x=jindex(s[y],"●") ) {
  34.                 sub("●","◎",s[y])
  35.                 for(i=x-1;i<x+2;i++) for(j=y-1;j<y+2;j++)
  36.                     d[i,j]++
  37.             }
  38.             gsub("◎","●",s[y])
  39.         }
  40.         for(y=1;y<ym;y++) {
  41.             t[y]=""
  42.             for(x=1;x<=xm;x++) {
  43.                 if(d[x,y]==3) t[y]=t[y] "●"
  44.                 else if(d[x,y]==4) t[y]=t[y] jsubstr(s[y],x,1)
  45.                 else t[y]=t[y] " "
  46.                 d[x,y]=0
  47.             }
  48.         }
  49.         printf("\x1b[%dA",ym+1) >err
  50.         printf("%12s    世代 %03d\n",ARGV[1],g)
  51.         for(y=1;y<ym;y++) {
  52.             print jsubstr(t[y],2)
  53.             s[y]=t[y]
  54.         }
  55.     }
  56. }
  57.